package control;

import java.sql.SQLException;
import java.util.HashMap;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import model.admin.OptionalServiceVO;
import model.letter.LetterService;
import model.letter.LetterVO;
import model.letter.ListVO;
import model.member.MemberVO;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;


public class LetterController extends MultiActionController {
	private LetterService letterService;
	public LetterController(LetterService letterService){
		this.letterService=letterService;
	}
	
	//optionalService의 신청유무를 확인하는 메서드, 신청 내역이 없으면 alert으로 알린다.
		public ModelAndView letterRequest(HttpServletRequest request,HttpServletResponse response){
			OptionalServiceVO osvo;
			HttpSession session = request.getSession(false);
			MemberVO mvo=(MemberVO) session.getAttribute("mvo");
			String id=mvo.getId();
			ModelAndView path=null;
			try {
				osvo = letterService.letterRequest(id);
				System.out.println("osvo 승인?"+osvo);
				if(osvo == null){
						path =new ModelAndView("member_optionalServiceRequestFinalResult.member","mess" ,"먼저 신청을 해야합니다.");
						System.out.println("osvo null...");
				}else if(osvo.getResponseAdmin().equals("0")){
						path =new ModelAndView("member_optionalServiceRequestFinalResult.member", "mess" ,"관리자의 승인을 기다리는 중입니다.");
						System.out.println("관리자 승인이 되지 않음...");
				}else{
					path=letterList(request, response, osvo);
					System.out.println("관리자 승인 letterList로 이동");
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return path;
		}
	
	//편지의 리스트를 출력하는 메서드 페이지번호가 인자값
		public ModelAndView letterList(HttpServletRequest request,HttpServletResponse response, OptionalServiceVO osvo){
			String pageNo=request.getParameter("pageNo");
			ListVO listVO=null;
			HashMap map=new HashMap();
			try {
				MemberVO mvo= (MemberVO) request.getSession(false).getAttribute("mvo");
				osvo = letterService.existByOptionalNo(mvo);
				map.put("pageNo", pageNo);
				int oNo=osvo.getOptionalNo();
				map.put("optionalNo", oNo);
				System.out.println("페이지와 부가서비스 번호..."+map);
				listVO = letterService.getLetterList(map);
				String imgFile=letterService.getImg(mvo);
				map.put("lvo",listVO);
				map.put("img", imgFile);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return new ModelAndView("coupleroom_letterList.letter","map",map);
		}
	//편지쓰기 폼으로 가는 메서드
	public ModelAndView letterForm(HttpServletRequest request,HttpServletResponse response){
		return new ModelAndView("coupleroom_letterWrite.letter");
	}
	//편지의 상세내용을 보여주는 메서드 편지번호를 LetterVO로 받음
	public ModelAndView getLetter(HttpServletRequest request,HttpServletResponse response,LetterVO lvo){
		LetterVO letter=null;
		try {
			letter = letterService.getLetter(lvo);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return new ModelAndView("coupleroom_letter.letter","letter",letter);
	}
	//편지를 인설트시키는 메서드 제약조건에 id가 있기 때문에 세션에서 mvo값을 가져옴
	public ModelAndView letterWrite(HttpServletRequest request,HttpServletResponse response,HttpSession session,LetterVO lvo){
		OptionalServiceVO osvo = null;
		
		try {
			MemberVO mvo=(MemberVO)session.getAttribute("mvo");
				lvo.setMvo(mvo);
				osvo=letterService.existByOptionalNo(mvo);
				lvo.setOptionalService(osvo);
				letterService.letterWrite(lvo);	
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return letterList(request, response, osvo);
	}
	//편지수정폼으로 가는 메서드 편지번호를 LetterVO로 받음
	public ModelAndView updateLetterForm(HttpServletRequest request,HttpServletResponse response,LetterVO lvo){
		LetterVO letter=null;
		try {
			letter = letterService.getLetter(lvo);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return new ModelAndView("coupleroom_update_letter_form.letter","letter",letter);
	}
	//편지를 업데이트 시키는 메서드 편지번호,수정제목,수정내용,수정편지지를 LetterVO로 받음
	public ModelAndView updateLetter(HttpServletRequest request,HttpServletResponse response,LetterVO lvo){
		try {
			letterService.updateLetter(lvo);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return getLetter(request, response, lvo);
	}
	//편지를 삭제 시키는 메서드 편지번호를 LetterVO로 받음
	public ModelAndView deleteLetter(HttpServletRequest request,HttpServletResponse response,LetterVO lvo){
		try {
			letterService.deleteLetter(lvo);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return letterList(request, response, null);
	}
}
